<?php

/**
 * UserIdentity represents the data needed to identity a user.
 * It contains the authentication method that checks if the provided
 * data can identity the user.
 */
class UserIdentity extends CUserIdentity
{
	// Need to store the user's ID:
	private $_id;
	/**
	 * Authenticates a user.
	 * The example implementation makes sure if the username and password
	 * are both 'demo'.
	 * In practical applications, this should be changed to authenticate
	 * against some persistent user identity storage (e.g. database).
	 *
	 * @return boolean whether authentication succeeds.
	 */
	public function authenticate()
	{
		/*
		 * $users=array( // username => password 'demo'=>'demo',
		 * 'admin'=>'admin', );
		 */
		// 验证用户和密码
		if (strpos ( $this->username, "@" ))
		{
			$user = user::model ()->findByAttributes ( array (
					'email' => $this->username 
			) );
		} else
		{
			$user = user::model ()->findByAttributes ( array (
					'username' => $this->username 
			) );
		}
		if ($user === null)
			if (strpos ( $this->username, "@" ))
			{
				$this->errorCode = self::ERROR_EMAIL_INVALID;
			} else
			{
				$this->errorCode = self::ERROR_USERNAME_INVALID;
			}
		else if ($this->password !== $user->password) // Yii::app ()->getModule (
		                                              // 'user' )->encrypting (
		                                              // $this->password )
			$this->errorCode = self::ERROR_PASSWORD_INVALID;
		else if (Yii::app ()->getModule ( 'user' )->loginNotActiv == false) // $user->status
		                                                                    // ==
		                                                                    // 0
		                                                                    // &&
			$this->errorCode = self::ERROR_STATUS_NOTACTIV;
		else if ($user->status == - 1)
			$this->errorCode = self::ERROR_STATUS_BAN;
		else
		{
			$this->_id = $user->id;
			$this->username = $user->username;
			$this->errorCode = self::ERROR_NONE;
		}
		/*
		 * if (! isset ( $users [$this->username] )) $this->errorCode =
		 * self::ERROR_USERNAME_INVALID; else if ($users [$this->username] !==
		 * $this->password) $this->errorCode = self::ERROR_PASSWORD_INVALID;
		 * else $this->errorCode = self::ERROR_NONE;
		 */
		return ! $this->errorCode;
	}
	
	/**
	 * 重写getId()
	 */
	public function getId()
	{
		return $this->_id; // 用户的ID就可以通过Yii::app()->user->id获得了
	}
}